import requests
from lxml import etree
import os

if __name__ == '__main__':
    i = 0
    gif_lists = []
    url = str(input("输入网址:")) # 输入需要下载图片的网址
    pathname = str(input("输入保存文件夹名（最佳为英文）:")) # 输入保存文件夹名词，文件夹是和代码同一个目录下
    if not os.path.exists(pathname): # 创建文件夹
        os.mkdir(pathname)

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
                      ' Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
    }

# 解析网页文本，相当于解析了网页的html、css和js代码，把他们变成文本存储
    page_text = requests.get(url=url, headers=headers).text
    tree = etree.HTML(page_text)
# 模式选择，应对不同的图片存储排列方式，可自行编辑xpath（）内的东西
    case = int(input("1为小图模式抓取，2为大图抓取:"))# 两个参考案例，可以自己编辑更多或者找到通用方法
    if case == 1:
        c = str(input("唯一区分符:")) # 为你让你区分图片批次
        gif_lists = tree.xpath('.//section[@data-role="paragraph"]//img/@data-src') # 此处需要修改，根据不同网页和图片展示的特性
    elif case == 2:
        c = str(input("唯一区分符:"))
        gif_lists = tree.xpath('.//img[@class="rich_pages wxw-img"]/@data-src')
    if len(gif_lists) == 0:
        print("xpath表达式错误，重新定位") # 一般会直接在上面就报错，会提示属性不对

# xpath中的东西，就是在网页的html代码中，找到图片对应的属性，唯一特有的属性，如一个img块中，class是一个特有的字段，就可以在已经解析好的etree文本中找到这个
# 标签下的属性文本信息，并存储在列表中，一一遍历列表即可get到数据，后保存即可
    for gif_list in gif_lists:
        i = i + 1 #计数符号
        gif_data = requests.get(url=gif_list, headers=headers).content
        img_name = c+str(i) #用标识符和数字进行命名
        imgpath = './'+pathname+'/'+img_name #保存位置
        with open(imgpath+'.gif', 'wb') as fp:
            fp.write(gif_data)
            print(img_name, '下载成功')
# 1，2模式选择上，依然不够完善，现在只能完成部分网页的操作，需要根据实际情况来调整抓取属性